Skip to content

docs(support-boundary): admission consent + the orchestrator reconcile trigger (two docs) - #236

Closed
sunib wants to merge 4 commits into
mainfrom
design/consent-and-reconcile-trigger
Closed

docs(support-boundary): admission consent + the orchestrator reconcile trigger (two docs)#236
sunib wants to merge 4 commits into
mainfrom
design/consent-and-reconcile-trigger

Conversation

@sunib

@sunib sunib commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Two design docs for review — direction-setting, ship no code. Originally one doc; split here into two because they are genuinely different topics, each with its own mermaid diagrams. They cross-reference each other as the two halves of one escalation ("what happens when the operator won't, or can't, write").

1. admission-consent.md — a blast-radius refusal you can say yes to

A policy refusal (editing a shared base) is binary and mute today. This makes it a yes the user can opt into:

  • Two kinds of "no": correctness (the render oracle — never negotiable) vs. policy (fan-in > 1 blast radius — you may just not realize). Consent lifts only the second.
  • Consent is declared intent, not a bypass: acknowledging "change prod and staging" promotes the sibling object into the oracle's WriteIntent set, and the same oracle re-verifies the larger intent. No second code path; correctness is never waved through.
  • Token scoped to a consequence-hash; lifts "did you realize," never "are you allowed" (cross-RBAC base edits stay refused).
  • Diagrams: the two-kinds-of-no decision, the consent-as-intent flow, and the admission allow/deny/ask flow.

2. orchestrator-reconcile-trigger.md — revert a refusal, and order around origin drift

The operator's one new outward action — ask Flux/Argo to reconcile now — used two ways:

  • Revert a refused edit promptly. Under selfHeal: false (required for bi-directional) nothing reverts it otherwise; and at refusal time the operator has the authorized-vs-unauthorized-drift signal Argo lacks.
  • An ordering barrier on origin drift: reconcile Git → cluster first, then process events, so the orchestrator's own apply is absorbed as a resync no-op instead of mirrored back.
  • Diagrams: built from docs/bi-directional.md — its triggered-applier loop and sequence — and expanded to show where the trigger sits: the selfHeal-off loop with the two arrows the guide doesn't draw (revert-on-refusal, origin-drift barrier), plus the refusal-revert and barrier sequences.
  • Honest about the prerequisite: this is the first write action on the orchestrator-ownership model, which is designed-but-unbuilt (orchestrator-knowledge-boundary.md) — the operator cannot name the Flux/Argo object for a path today.

Note

Neither doc is linked from the folder README in this commit: the working-tree README holds uncommitted WIP (your "Renderers & provenance" / kpt-doc row), and I kept my commits clear of it. The two index rows are one-liners to add alongside it.

🤖 Generated with Claude Code

…rigger

A refused write is correct but delivered badly: it is decided late (at flush),
invisible to the actor (the API server already returned 200), and — under the
selfHeal:false config bi-directional editing requires — never reverted, since
selfHeal is the only thing that reverts live drift.

This design turns the refusal into a conversation, extending the tier-1/2/3 model
in unreflectable-edits-and-write-gating.md in two directions its tier 3 does not
cover:

  - CONSENT. Split refusals into correctness (the render oracle — never
    negotiable) and policy (fan-in>1 blast radius — the user may just not realize).
    Consent lifts only the policy kind, and it is modelled as DECLARED INTENT, not
    a bypass: acknowledging "this changes prod and staging" promotes the sibling
    object from the oracle's must-be-untouched set into its intended set, and the
    same oracle re-verifies the larger intent. No second code path; correctness is
    never waved through. The token is scoped to a computed consequence-hash, and it
    lifts "did you realize", never "are you allowed" (cross-RBAC base edits stay
    refused). This is what opens the door to a deliberate shared-base edit.

  - THE RECONCILE TRIGGER. One new outward action — ask Flux/Argo to reconcile now
    — used two ways. (1) Revert a refused edit promptly: with selfHeal off it is
    the ONLY thing that ever reverts it, and at refusal time the operator has the
    authorized-vs-unauthorized-drift signal Argo lacks, so it is the targeted
    substitute for the self-heal it had to disable. (2) An ordering barrier on
    origin drift: reconcile Git->cluster first, then process events, so the
    orchestrator's own apply is absorbed as a resync no-op instead of mirrored back
    (the reconcile echo).

Grounded in the code: the oracle's WriteIntent set (render_verify.go), the
CAS+rebase-by-replay that already handles a moved remote (git_atomic_push.go,
branch_worker.go), and the existing replay barrier (target_watch.go). Honest about
the prerequisites it does not have: the reconcile trigger is the FIRST write action
on the orchestrator-ownership model, which is designed-but-unbuilt
(orchestrator-knowledge-boundary.md) — the operator cannot name the Flux/Argo
object for a path today.

Direction-setting; ships no code.
@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@sunib, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 19 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ab5ea6d3-10d4-456e-bce8-40fc3b094729

📥 Commits

Reviewing files that changed from the base of the PR and between 64bebc0 and 5a36096.

📒 Files selected for processing (4)
  • docs/design/support-boundary/README.md
  • docs/design/support-boundary/admission-consent.md
  • docs/design/support-boundary/kpt-and-krm-functions.md
  • docs/design/support-boundary/orchestrator-reconcile-trigger.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch design/consent-and-reconcile-trigger

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Jul 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…two docs

They are two topics that shared a document. Split into:

  - admission-consent.md — turning a blast-radius refusal into a yes at the edit.
    The correctness-vs-policy split, consent as declared intent (promote the
    sibling into the oracle's WriteIntent set — never a bypass), the
    consequence-hash token, and the authorization edge consent must not cross.

  - orchestrator-reconcile-trigger.md — the operator's one new outward action,
    used two ways: revert a refused edit promptly (the only revert under
    selfHeal-off), and an ordering barrier on origin drift.

Each carries its own mermaid diagrams. The trigger doc's are built from the
diagrams in docs/bi-directional.md — the triggered-applier loop and sequence —
and expanded to show where the trigger sits: the two arrows that guide does not
draw (revert-on-refusal, and the origin-drift barrier), plus the refusal and
barrier sequences. The two docs cross-reference each other as the two halves of
one escalation.

Direction-setting; ships no code.
@sunib sunib changed the title docs(support-boundary): consent + the orchestrator reconcile trigger docs(support-boundary): admission consent + the orchestrator reconcile trigger (two docs) Jul 15, 2026
sunib and others added 2 commits July 15, 2026 05:27
An orientation note on where Kpt and KRM functions fit the reverse-GitOps model:
packages as render roots, setters as an explicit inverse contract, function
pipelines as a renderer extension point (not an inverse API), and a per-capability
support ladder. It reuses the same oracle the Kustomize work established — a render
result is not a source map, and causation is not governance.

Indexed under "Renderers & provenance" in the folder README.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…gger docs

Link the two docs split out earlier from the folder README, under 'Edits with no
home' beside the tier-1/2/3 write-gating doc they extend.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
sunib added a commit that referenced this pull request Jul 15, 2026
…nd kpt notes here

Fold the design docs from the design/consent-and-reconcile-trigger branch (PR #236)
onto this PR so the support-boundary design work lives in one PR rather than
several: admission-consent.md, orchestrator-reconcile-trigger.md, and the
kpt-and-krm-functions orientation note, plus their README index rows. render-fidelity
joins the "Renderers & provenance" row beside the other render docs. No content
change to any doc; PR #236 is superseded and closed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sunib

sunib commented Jul 15, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #237 — consolidated the design docs (admission-consent, orchestrator-reconcile-trigger, and the kpt note) there to keep the support-boundary design work in one PR. Closing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant